/********************************************************************************
* This program is free software; you can redistribute it and/or modify it under *
* the terms of the GNU General Public License as published by the Free Software *
* Foundation; either version 2 of the License, or (at your option) any later 	*
* version. This program is distributed in the hope that it will be useful, but 	*
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more *
* details. You should have received a copy of the GNU General Public License 	*
* along with this program; if not, write to the Free Software Foundation, Inc., *
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.						*
* (c) Copyright 2012 José Delgado Pérez, josedelgado@ula.ve josed43@gmail.com.	*				*
********************************************************************************/

/**
 @file comunicacionSerial.h
 @brief Clase para el manejo de la comunicación serial, hace uso del manejador serial de Arduino.
 @date Diciembre, 2012.
 @author José Delgado Pérez, josedelgado@ula.ve josed43@gmail.com.
 @version 0.9
*/

#ifndef COMUNICACIONSERIAL_H_
#define COMUNICACIONSERIAL_H_

class comunicacionSerial {

public:

	/** Constructor vacío de clase. */
	comunicacionSerial();

	/**
	 @brief Constructor, inicializa la comunicación serial con la velocidad en bauidios indicada.
	 @param baudios Velocidad en la trabajara la comunicacíon por el puerto serial.
	*/
	comunicacionSerial(unsigned long int baudios);

    /**
	 @brief Inicializa la comunicación serial con la velocidad en bauidios indicada.
	 @param baudios Velocidad en la trabajara la comunicacíon por el puerto serial.
	*/
	void iniciarComunicacion(unsigned long int baudios);

    /**
	 @brief Vaciá el bufer serial del arduino desecha toda la información.
	 */
	void limpiarBufer();

    /**
	 @brief Enviá la orden al servo para que se mueva a un ángulo especifico.
	 @param angulo Valor entero del ángulo de posicionamiento del Servo Motor.
	 @return true Si hay algo en el bufer del Arduino.
	 	 	 false Si el bufer del arduino esta vació.
	*/
	bool verificarBufer();

    /**
	 @brief Permite enviar una cadena de bytes por el puerto serial.
	 @param nBytes Número de bytes que se desean enviar por el puerto serial.
	 @param *sbuf Apuntador a la cadena de bytes que se desean enviar por el puerto serial.
	*/
	void escribirDatos(uint8_t nBytes, uint8_t *sbuf );

    /**
	 @brief Permite leer una cadena (comando) que se encuentre en el bufer serial del Arduino, se le debe indicar un carácter de fin
	 	 	de cadena y un numéro con el el tamaño maximo de la cadena a leer, lee hasta la primera condición que suceda, encontro
	 	 	el caracter de fin de cadena o supero el tamaño máximo indicado, (Saca del bufer cada carácter leído).
	 @param finComando Caracter que indica el fin de la lectura en el bufer.
	 @param *sbuf Apuntador a variable donde se va almacenara la lectura.
	 @param maxSizeComando Tamaño máximo de la cadena.
	*/
	void leerDatos( char finComando, char* sbuf, int maxSizeComando );

	/** Destructor */
	virtual ~comunicacionSerial();

};

#endif /* COMUNICACIONSERIAL_H_ */
